[C/C++]指针解析,char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][
来源:互联网 发布:java工程师 职业寿命 编辑:程序博客网 时间:2024/05/16 14:43
不懂指针还敢说你在学习C?!
请先百度:“char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on in memory ” (作者:德哥@Dig)
这个图文并茂,解释的很详细.(就不放链接了,最近csdn老抽风,一放链接就提示:包含禁用的URL)
但看完信息量太大,先简单整理下:
1. 指针相关笔记
1> 指针中的" * "问题
如果前面有类型标识符(int. NSString...),此时" * "只是个标记,表明这是指针;
如果前面无类型标识符,此时" * " 表示取值操作符,它会把指针指向的地址中的内容 取出来或者赋值.
2> 指针的类型(int / float 等) 决定了 从(指针对应的)首地址下取几个字节的内容
3> 看字节数 用sizeof() 函数; 指针所占字节数: 32位 占4字节(byte), 64位 占8字节 (just remember it)
4> 给指针赋值,意味着给指针 重指向 (即 改变指针指向的地址)
5> 设定了函数变量为指针,则调用该函数时,需要使用地址符而非变量
否则会有错误:“Incompatible integer to pointer conversion 。。。”
e.g.
void changeValue(int *number)
则:
changeValue(a); (错误:Incompatible integer to pointer conversion passing 'int' to paremeter of type 'int'… )
changeValue(&a); (正确.)
2. 指针的输出格式及内容:
备注:以64位为例
2.1
char* a="hello";
输出结果:
a %s : hello (输出a所指的地址的全部内容)
a %p :0x5310 (这个是指针a的内容/值,因为a指向的时地址,所以a的内容是地址0x5310)
&a %p:0xbfffed6c (指针a的地址)
*a %c : h (%c输出指针所指的地址的内容,a指的是首地址,所以内容是‘h’)
*a %d : 104 (输出整型,为何是104,还没搞懂。。2014-06-04 待续ing。。??)
*a %x : 68
2.2
char *b =&a;
*b 表示 b是一个指针, 然后char *则是告诉你b指向的是一个指针, 甭管是什么类型的指针,反正b指向的是一个指针, 一个指针占用8字节, 所以b+1就是加8个字节
原文链接:http://blog by德哥@Dig)
<span style="font-family:Arial;">#include <stdio.h>int main() { char *a[1] = {"abc","def"}; fprintf(stdout, "a[1]:%s\n", a[1]); return 0;}结果 : [root@db-172-16-3-33 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./b.c -o b && ./bcc1: warnings being treated as errors./b.c: In function ‘main’:./b.c:4: warning: excess elements in array initializer // 超出数组长度. 因为赋值时给了2个元素, 而限定只有1个元素../b.c:4: warning: (near initialization for ‘a’)</span>
<span style="font-family:Arial;">#include <stdio.h>int main() { char a[2][10] = {"hello", "world", "linux"}; return 0;}结果 : [root@db-172-16-3-33 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./b.c -o b && ./bcc1: warnings being treated as errors./b.c: In function ‘main’:./b.c:4: warning: excess elements in array initializer // 1维在赋值时给出了3个元素"hello" , "world" , "linux" 因此告警了, 可能导致内存溢出../b.c:4: warning: (near initialization for ‘a’)./b.c:4: warning: unused variable ‘a’</span>
- [C/C++]指针解析,char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][
- 深入char * ,char ** ,char a[ ] ,char *a[]
- char *,char **,char a[ ],char *a[]
- 深入 char * ,char ** ,char a[ ] ,char *a[]
- 深入char*,char**,char a[],char *a[]
- char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][],
- char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][]
- char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][],
- char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][]学习
- char * a, char ** a, char * a[] 区别
- C语言 char* a 与 char a[]
- C++指针详解char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][]
- 如何理解指针和数组char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][]
- char **a
- char *a[ ]
- char a[ ][ ]
- char a[]和char* a
- char a[] 和 char *a
- objective-c启用ARC时的内存管理
- 关于execlp 函数的使用和说明
- 表单验证插件jquery.validate.js
- 小细节:有关数组的指针的一道题
- [LeetCode49]Maximum Subarray
- [C/C++]指针解析,char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][
- NOI2008 Day 1 解题报告
- 第一次黑人,简直爽到不行!!
- 数组简单总
- jplogicv1.0开发开发案例之知识库文档信息索引检索(类仿百度搜索、类google搜索)
- C++Primer学习笔记《2》
- netty学习之Channel接口
- ffmpeg(11) pmt_cb
- NSTimer 用法总结