本文共 2439 字,大约阅读时间需要 8 分钟。
#include2. array of arrays :char *a[] = {"abc","defgh"};int main() { printf("addr a[0]:%p , addr a[1]:%p\n", a[0], a[1]); printf("a[0]:%s , a[1]:%s\n", a[0], a[1]); a[0]=a[1]; printf("addr a[0]:%p , addr a[1]:%p\n", a[0], a[1]); printf("a[0]:%s , a[1]:%s\n", a[0], a[1]); return 0;}结果 : [root@db-172-16-3-150 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./m.c -o m && ./maddr a[0]:0x400648 , addr a[1]:0x40064ca[0]:abc , a[1]:defghaddr a[0]:0x40064c , addr a[1]:0x40064ca[0]:defgh , a[1]:defgh[root@db-172-16-3-150 zzz]# cat m.c
#include可以从一维的数组看array在C中不能指向其他地址则更加明朗 :char a[][10] = {"abc","defgh"};int main() { printf("addr a[0]:%p , addr a[1]:%p\n", a[0], a[1]); printf("a[0]:%s , a[1]:%s\n", a[0], a[1]); a[0]=a[1]; printf("addr a[0]:%p , addr a[1]:%p\n", a[0], a[1]); printf("a[0]:%s , a[1]:%s\n", a[0], a[1]); return 0;}结果, 由于array变量不存在, 它在编译时已经替换成地址了, 所以修改array变量的指向也是不允许的.[root@db-172-16-3-150 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./m.c -o m && ./m./m.c: In function ‘main’:./m.c:7: error: incompatible types in assignment
[root@db-172-16-3-150 zzz]# cat n.c#include使用指针则可以修改 :char a[] = "abcde";int main() { char b[] = "efg"; a = b; printf("a:%s\n", a); return 0;}结果[root@db-172-16-3-150 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./n.c -o m && ./n./n.c: In function ‘main’:./n.c:6: error: incompatible types in assignment
[root@db-172-16-3-150 zzz]# cat n.c#include虽然array变量本身不能修改起地址值, 但是array中存储的值是可以被修改的如 :char *a = "abc";int main() { char b[] = "efghi"; a = b; printf("a:%s\n", a); return 0;}结果[root@db-172-16-3-150 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./n.c -o n && ./na:efghi
[root@db-172-16-3-150 zzz]# cat n.c#includechar a[] = "abc";int main() { *a = '1'; printf("a:%s\n", a); return 0;}结果[root@db-172-16-3-150 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./n.c -o n && ./na:1bc
转载地址:http://kvxwm.baihongyu.com/