指针访问数组
2014-07-18 19:41
148 查看
指针访问数组有几下几点不同:
1.通过指针变量,无法获取到指针指向的内容的大小;
2.int * 是确定指针所要寻找的内容的大小,和指针的算数时所需要跳转的字节数量;
3.指针变量是变量可以通过自增方式访问地址名,数字名不能自增。
指针是从高到低分配,却从低到高存储的。这个可以通过语句来表达:
int a = 3;
int b = 5;
int c = 8;
printf("%p\n", &a);
printf("%p\n", &b);
printf("%p\n", &c);
通过输出我们可以看出a比b大4个字节,说明a比b高,那么如果把int b = 8; 改为int b = 0x78563412; 输出的又变成什么了呢。。其实指针就是一个8字节的内存,将16进制的b放到内存当中输出,就是12345678,存储是低位开始,分配写入时却是从高到低,这样就更加让我们理解指针的定义了。
但是我们还需要注意一点,指针不能对long 进行间接寻址,例代码如下:
long x = a;
short *p3 = x;
printf("*p3 = %d\n", *p3);
这样就是错误的,系统会提示 Incompatible integer to pointer convwesion initializing 'short * with an expression of type 'long'; 错误的东西,一定要提醒自己忘记,每天早上打一遍代码,告诉自己我要忘了它!!
请思考:你们知道字符串是什么吗?谁能告诉我明确的答案?
其实,字符串就是一个一维数组,char string[] = "iphone" 和 char string[] = {'i', 'p', 'h', 'o', 'n', 'e'}; 他们是一样的,对吗?我们知道字符串“iPhone” 是占内存的,那么你们知道string也是需要占内存的。
char *string1[] = “iPhone”; //字符串数组,保存的是首地址,存的是'i' 的地址;
还有一点,一旦常量产生了,所有的地址都在这里取,例:printf("%p\n", "iphone"); 不管我们写多少遍这个代码,“iphone”所存的地址都是同一个,需要字符串的时候都是从这里取的,则指针*(string1 + 1) = 'x' 只能读取,不能改变原有的数。
char *string[3] = {"iphone", "android", "win8"}; 这个指针分配的是24个字符。可以用循环将他们的地址都输出出来:
for (int i = 0; i < 3; i++) {
printf("%s\n", strings[i]);
printf("%p\n", strings[i]);
}
1.通过指针变量,无法获取到指针指向的内容的大小;
2.int * 是确定指针所要寻找的内容的大小,和指针的算数时所需要跳转的字节数量;
3.指针变量是变量可以通过自增方式访问地址名,数字名不能自增。
指针是从高到低分配,却从低到高存储的。这个可以通过语句来表达:
int a = 3;
int b = 5;
int c = 8;
printf("%p\n", &a);
printf("%p\n", &b);
printf("%p\n", &c);
通过输出我们可以看出a比b大4个字节,说明a比b高,那么如果把int b = 8; 改为int b = 0x78563412; 输出的又变成什么了呢。。其实指针就是一个8字节的内存,将16进制的b放到内存当中输出,就是12345678,存储是低位开始,分配写入时却是从高到低,这样就更加让我们理解指针的定义了。
但是我们还需要注意一点,指针不能对long 进行间接寻址,例代码如下:
long x = a;
short *p3 = x;
printf("*p3 = %d\n", *p3);
这样就是错误的,系统会提示 Incompatible integer to pointer convwesion initializing 'short * with an expression of type 'long'; 错误的东西,一定要提醒自己忘记,每天早上打一遍代码,告诉自己我要忘了它!!
请思考:你们知道字符串是什么吗?谁能告诉我明确的答案?
其实,字符串就是一个一维数组,char string[] = "iphone" 和 char string[] = {'i', 'p', 'h', 'o', 'n', 'e'}; 他们是一样的,对吗?我们知道字符串“iPhone” 是占内存的,那么你们知道string也是需要占内存的。
char *string1[] = “iPhone”; //字符串数组,保存的是首地址,存的是'i' 的地址;
还有一点,一旦常量产生了,所有的地址都在这里取,例:printf("%p\n", "iphone"); 不管我们写多少遍这个代码,“iphone”所存的地址都是同一个,需要字符串的时候都是从这里取的,则指针*(string1 + 1) = 'x' 只能读取,不能改变原有的数。
char *string[3] = {"iphone", "android", "win8"}; 这个指针分配的是24个字符。可以用循环将他们的地址都输出出来:
for (int i = 0; i < 3; i++) {
printf("%s\n", strings[i]);
printf("%p\n", strings[i]);
}
相关文章推荐
- Delphi/FreePascal用指针访问数组的异同
- 字符数组指针访问
- 指针与数组--指针访问与下标访问
- C专家编程--指针和数组(四) 指针对数组的访问
- C专家编程--数组与指针(一)数组 指针 访问方式 区别
- 用指针访问数组
- 指针访问方式从键盘给数组 a[N]输入数据, 然后对元素值重新按逆序存放并输出
- 指针访问数组2
- 指针访问数组1
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出
- 访问元素:指向数组的指针与指向指针的指针
- C语言使用指针访问数组
- 指针访问与数组访问的效率分析
- 指针在数组和链表中的访问使用误区
- 数组的下标访问和指针访问方式效率分析比较
- 数组 指针访问
- 7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(
- C语言数组和指针是如何访问的
- 从键盘输入十个整数存入一维数组中,求出它们的和及平均值并输出(要求用指针访问数组元素)?
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出 .